The present invention relates to a multiple processor computer system, and more particularly to a method and apparatus for controlling data transfers into and out of an input/output processor that is shared by other processors or controllers of the computer system.
Typically, a multiple processor computer system has at least one central processing unit (CPU) and one or more controllers, such as a direct memory access controller. Additionally, a multiple processor computer system has certain assets that are shared by the CPU(s) and controller(s). System buses, main memories, input/output channels and mass storage drives (MSD) are some examples of such shared assets.
Shared assets are typically shared for two reasons: to provide access to shared data, and to reduce cost by time sharing an asset among the CPU(s) instead of providing each CPU with its own respective asset.
A common problem with shared assets within a system, is how the use of a shared asset is allocated among the CPU(s) and controller(s) that need to access the shared asset. Unstructured allocation of a shared asset typically results in domination by one processor to the detriment of the other processors that need the shared asset. Structured allocation of a shared asset prevents domination of a shared process by one processor to the detriment of a competing processor or controller. Structured allocation schemes called arbitration methods are well known and widely used; however, each of the known arbitration methods has some type of limitation that reduces throughput of data to and from the shared asset.
A very simple arbitration method is to assign each processor and each controller a unique priority level. When a shared asset is available, the shared asset is allocated to the processor or controller with the highest priority level that is awaiting that asset. The problem with this type of arbitration method is that in busy systems the lowest priority processor or controller is "starved out" because it never makes it to that "highest priority level awaiting" that is allocated to the shared asset.
Another simple arbitration method is the timed loop arbitration method in which each processor or controller is automatically allocated a period of time to access the shared resource whether it needs it or not. This removes the worst "starve out" problems. This arbitration method, however, has a related problem of data latency.
Data latency can be a difficult problem for mass storage drives, especially during write operations. The conversion of the data from parallel to serial format and the generation and addition of error correcting codes takes some processing time. The actual recording of the serial data and error correcting codes onto the mass storage media takes time also. For example, if a data block in sectors 1 through 10 is to be updated and the write head is currently located over sector 3, there will be a substantial delay until sector 1 again rotates around to begin a sequential write operation.
In view of the latency problems of known arbitration methods, it is an object of the present invention to provide an arbitration method that does not starve any processor or controller out and yet has a very low data latency time for writes to a mass storage drive, as well as, other high priority operations.
It is another object of the present invention to provide an arbitration method that may be dynamically adjusted to improve the data latency between a buffer memory and a mass storage drive.